package com.taijihuabao.modules.service;

import com.taijihuabao.common.commonutils.PageResult;
import com.taijihuabao.modules.model.basedto.IdDTO;
import com.taijihuabao.modules.model.basedto.EmailAddressDTO;
import com.taijihuabao.modules.model.basedto.FileDTO;
import com.taijihuabao.modules.model.user.dto.*;
import com.taijihuabao.modules.model.user.vo.UserInfoVO;
import com.taijihuabao.modules.model.user.vo.UserLoginVO;
import com.taijihuabao.modules.model.user.vo.UserSelectorVO;
import org.springframework.security.core.userdetails.UserDetailsService;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @author 用户管理
 */
public interface UserService extends UserDetailsService {

    /**
     * 获取图片验证码
     *
     * @param response
     */
    void getLoginVailCodeImg(HttpServletResponse response);

    /**
     * 登录
     *
     * @param loginDTO
     * @return
     */
    UserLoginVO login(UserLoginDTO loginDTO);

    /**
     * 注册验证码邮件
     *
     * @param emailAddressDTO
     */
    void registerVailCode(EmailAddressDTO emailAddressDTO);

    /**
     * 注册
     *
     * @param registerDTO
     * @return
     */
    void register(UserRegisterDTO registerDTO);

    /**
     * 修改密码
     *
     * @param upPassDTO
     * @return
     */
    void updPass(UserUpPassDTO upPassDTO);

    /**
     * 忘记密码验证码邮件
     *
     * @param emailAddressDTO
     */
    void forgetLoginVailCode(EmailAddressDTO emailAddressDTO);

    /**
     * 忘记密码验证码校验
     *
     * @param emailVailCodeDTO
     */
    void forgetVailCodeVerify(UserEmailVailCodeDTO emailVailCodeDTO);

    /**
     * 密码重置
     *
     * @param forgetPassDTO
     */
    void forgetPassRepeat(UserForgetPassDTO forgetPassDTO);

    /**
     * 列表
     *
     * @param listDTO
     * @return
     */
    PageResult selectList(UserListFromDTO listDTO);

    /**
     * 获取所有用户
     *
     * @return
     */
    List<UserSelectorVO> userSelector();

    /**
     * 信息
     *
     * @param id
     * @return
     */
    UserInfoVO selectById(Long id);

    /**
     * 管理员新增用户并授权
     *
     * @param crFromDTO
     * @return
     */
    void insert(UserCrFromDTO crFromDTO);

    /**
     * 修改用户信息
     *
     * @param upFromDTO
     * @return
     */
    void update(UserUpFromDTO upFromDTO);

    /**
     * 逻辑删除
     *
     * @param dto
     * @return
     */
    void delete(IdDTO dto);

    /**
     * 获取所有的登录的信息。
     *
     * @return
     */
    List<Map<String, Object>> getAllRedisVal();

    /**
     * 查询头像路径
     *
     * @return 文件路径
     */
    String userProfilePathQuery();

    /**
     * 添加头像路径
     *
     * @param fileDTO
     */
    void addUserProfile(FileDTO fileDTO);

}
